﻿Imports Entidad
Imports Negocio
Imports Utilitario
Public Class frmConfirmCarga

    Dim servicio1 As New VehiculoNegocio
    Dim servicio2 As New TurnoNegocio
    Dim servicio3 As New ProgramacionNegocio
    Dim servicio4 As New DocumentoClienteNegocio
    Dim servicio5 As New PedidoNegocio

    Dim empezar As Boolean = False
    Dim pedidoCodigo As String = ""

    Sub mensaje(ByVal men As String)
        MsgBox(men, MsgBoxStyle.Information, "Mensajes al Usuario")
    End Sub

    Sub listarBultosLargos(codPedido As String)
        limpiarBultosLargos()

        Dim ds As DataSet = servicio3.listarBultosLargos(codPedido)

        For i = 0 To ds.Tables(0).Rows.Count - 1
            dgvBulLargos.Rows.Add(ds.Tables(0).Rows(i)("Cantidad").ToString.Trim, ds.Tables(0).Rows(i)("Caja").ToString.Trim, ds.Tables(0).Rows(i)("Obser").ToString.Trim)
        Next

        If ds.Tables(0).Rows.Count <> 0 Then
            dgvBulLargos.Rows(0).Selected = False
        End If
    End Sub

    Sub listarProgramacionSalida()
        Dim ds As DataSet = servicio3.listarPedidosSalida(cboVehiculo.SelectedValue.ToString, cboTurno.SelectedValue.ToString, lblFecha.Text)

        dgvPedSalida.DataSource = ds.Tables(0)

        If ds.Tables(0).Rows.Count <> 0 Then
            dgvPedSalida.Rows(0).Selected = False
        End If
    End Sub

    Sub cargarTurno()
        With cboTurno
            .DataSource = servicio2.obtenerTurnos(Date.Now.ToString("HH:mm:ss")).Tables(0)
            .ValueMember = "TUR_Codigo"
            .DisplayMember = "TUR_Descripcion"
        End With
    End Sub

    Sub cargarVehiculos()
        With cboVehiculo
            .DataSource = servicio1.listarVehiculos().Tables(0)
            .ValueMember = "VEH_Codigo"
            .DisplayMember = "VEH_Placa"
        End With
    End Sub

    Sub iniciar()
        cargarVehiculos()
        cargarTurno()
        lblFecha.Text = Date.Now.ToString("dd/MM/yyyy")
        empezar = True
    End Sub

    Private Sub frmSalidaVehiculo_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        iniciar()
    End Sub

    Private Sub cboVehiculo_SelectedValueChanged(sender As Object, e As System.EventArgs) Handles cboVehiculo.SelectedValueChanged
        If empezar = True Then
            listarProgramacionSalida()
        End If
    End Sub

    Private Sub cboTurno_SelectedValueChanged(sender As Object, e As System.EventArgs) Handles cboTurno.SelectedValueChanged
        If empezar = True Then
            listarProgramacionSalida()
        End If
    End Sub

    Sub limpiarBultosLargos()
        dgvBulLargos.Rows.Clear()
    End Sub

    Sub operacion(e As System.Windows.Forms.DataGridViewCellEventArgs)
        dgvPedSalida.EndEdit()
        Dim f As Integer = e.RowIndex
        Dim c As Integer = e.ColumnIndex

        If f > -1 Then
            If c = 0 Then
                pedidoCodigo = dgvPedSalida.Item("Column2", f).Value
                listarBultosLargos(pedidoCodigo)
            End If
        End If
    End Sub

    Private Sub dgvPedSalida_CellContentClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvPedSalida.CellContentClick
        operacion(e)
    End Sub

    Private Sub dgvPedSalida_CellFormatting(sender As Object, e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles dgvPedSalida.CellFormatting
        For i = 0 To dgvPedSalida.Rows.Count - 1
            If dgvPedSalida.Item("Column3", i).Value = EST_PorRepartir And e.RowIndex = i Then
                e.CellStyle.BackColor = Color.Yellow
            End If
        Next
    End Sub

    Private Sub btnConfirmacion_Click(sender As System.Object, e As System.EventArgs) Handles btnConfirmacion.Click
        limpiarBultosLargos()
        If dgvPedSalida.RowCount <> 0 Then
            If MsgBox(muestraMensaje() & " ¿Está seguro que desea realizar la carga?", MsgBoxStyle.Question + MsgBoxStyle.YesNo + MsgBoxStyle.DefaultButton2, "Mensajes al Usuario") = MsgBoxResult.Yes Then
                For Each fila As DataGridViewRow In dgvPedSalida.Rows
                    If Convert.ToBoolean(fila.Cells("Column1").Value) = True Then
                        'No importa el estado del pedido .... detecta que esta chekeado y 
                        'lo convierte a estado POR REPARTIR y con FLAG PROGRAMADO
                        servicio4.actualizarEstadoPedido(fila.Cells("Column2").Value, EST_PorRepartir, "P")
                        servicio4.actualizarFlagProgramado(fila.Cells("Column2").Value, "P", "1")
                        servicio3.actualizarFechaCarga(fila.Cells("Column2").Value)
                    Else
                        'convierte a estado EN CELDA y con FLAG DESPROGRAMADO
                        servicio4.actualizarEstadoPedido(fila.Cells("Column2").Value, EST_Celda, "P")
                        servicio4.actualizarFlagProgramado(fila.Cells("Column2").Value, "P", "0")
                    End If
                Next
                mensaje("Registro Completado.")
                imprimirDiarioDistribucion(cboTurno.SelectedValue.ToString, lblFecha.Text, cboVehiculo.SelectedValue.ToString)
                listarProgramacionSalida()
            End If
        Else
            mensaje("No hay pedidos por confirmar.")
        End If
    End Sub

    Private Function muestraMensaje() As String
        Dim contador1 As Integer = 0
        Dim contador2 As Integer = 0
        For Each fila As DataGridViewRow In dgvPedSalida.Rows
            If Convert.ToBoolean(fila.Cells("Column1").Value) = True Then
                contador1 = contador1 + 1
            Else
                contador2 = contador2 + 1
            End If
        Next
        Return "Cargados : " & contador1 & IIf(contador1 = 1, " pedido ; ", " pedidos ; ") & "No Cargados : " & contador2 & IIf(contador2 = 1, " pedido", " pedidos")
    End Function

    Sub imprimirDiarioDistribucion(turno As String, fecha As String, vehiculo As String)
        If verificarPedidosMarcados() > 0 Then
            If MsgBox("¿Desea imprimir el diário de distribución?", MsgBoxStyle.Question + MsgBoxStyle.YesNo + MsgBoxStyle.DefaultButton2, "Mensajes al Usuario") = MsgBoxResult.Yes Then
                Dim report As New crDistribucion
                Dim data As New DataDis

                Dim ds As DataSet = servicio5.obtenerDiarioDistribucion(turno, fecha, vehiculo)

                For i = 0 To ds.Tables(0).Rows.Count - 1
                    data.Tables("Distribucion").Rows.Add(ds.Tables(0).Rows(i)("clienteAgencia").ToString.Trim, ds.Tables(0).Rows(i)("direccion").ToString.Trim,
                                                         ds.Tables(0).Rows(i)("guiaFactura").ToString.Trim, ds.Tables(0).Rows(i)("bultosEnvases").ToString.Trim,
                                                         ds.Tables(0).Rows(i)("condVenta").ToString.Trim, ds.Tables(0).Rows(i)("monedaAbrev").ToString.Trim,
                                                         ds.Tables(0).Rows(i)("totalCobrar").ToString.Trim, ds.Tables(0).Rows(i)("pedido").ToString.Trim)
                Next

                report.SetDataSource(data)

                report.PrintToPrinter(1, False, 0, 0)
            End If
        Else
            mensaje("Para imprimir el diario de distribución debe haber pedidos cargados al vehículo")
        End If
    End Sub

    Private Function verificarPedidosMarcados() As Integer
        Dim valor As Boolean = False
        Dim contador As Integer = 0
        For Each fila As DataGridViewRow In dgvPedSalida.Rows
            If Convert.ToBoolean(fila.Cells("Column1").Value) = True Then
                contador = contador + 1
            End If
        Next
        Return contador
    End Function

End Class